package matriz;

import java.util.NoSuchElementException;

import celda.Celda;

public class Iterador {
	Matriz matriz;	
	int filas;
	int columnas;
	int pos = -1;
	
	//Constructor: iterador que recorre (de izq. a der., de arriba a abajo)
	//las posiciones de la Matriz, comenzando a partir de la posicion cero
	public Iterador(Matriz matriz, int filas, int columnas) {
		this.matriz = matriz;
		this.filas = filas;
		this.columnas = columnas;				
	}
	
	//Devuelve true si el proximo elemento pertenece a la Matriz
	//Comienza testeando el elemento cero
	public boolean hasNext() {
		pos = pos + 1;		
		if(pos < filas*columnas) {			
			return true;
		}
		return false;
	}
	
	//El metodo next se usa dentro de un ciclo while(hasNext)
	//Devuelve el elemento testeado por hasNext
	public Celda next() throws NoSuchElementException {		
		int fil = pos / columnas;
		int col = pos % columnas;		
		return matriz.getElemento(fil, col);		
	}
	
	//El metodo set se usa dentro de un ciclo while(hasNext)
	//Setea el elemento testeado por hasNext
	public void set(Celda celda) {
		int fil = pos / columnas;
		int col = pos % columnas;
		matriz.setElemento(fil, col, celda);
	}
	
	//El metodo remove se usa dentro de un ciclo while(hasNext)
	//Elimina el elemento testeado por hasNext
	public void remove() {
		int fil = pos / columnas;
		int col = pos % columnas;
		matriz.removeElemento(fil, col);		
	}
	
	//Devuelve el primer elemento de la matriz
	public Celda first() throws NoSuchElementException {		
		int fil = 0;
		int col = 0;		
		return matriz.getElemento(fil, col);		
	}
	
	//Devuelve el ultimo elemento de la matriz
	public Celda last() throws NoSuchElementException {		
		int fil = filas-1;
		int col = columnas-1;		
		return matriz.getElemento(fil, col);		
	}
	
	//Indica si se llego al final de la Matriz
	public boolean isDone() {
		if(pos == filas*columnas) {
			return true;
		}
		return false;
	}

	
}






